package com.sisgesbyte.services.administracion;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.administracion.MantCategoriaProductoDao;
import com.sisgesbyte.dao.beanDao.CategoriaProductoReq;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.data.entity.administracion.CategoriaProductoEntity;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.services.administracion.bean.CategoriaProdBean;
import com.sisgesbyte.services.administracion.bean.CategoriaProdListaResponse;
import com.sisgesbyte.services.commonBean.GenericResponse;

@Stateless
public class MantenimientoCategoriaProdImpl implements
		MantenimientoCategoriaProd {

	@EJB
	private MantCategoriaProductoDao categoriaProductoDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public CategoriaProdListaResponse listaCategoriasProducto( String codTransaccion, FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[listaCategoriasProducto idTx=" + codTransaccion + "] - ";
		CategoriaProdListaResponse response = new CategoriaProdListaResponse();
		
		try{
			 response.setIdTransaccion(codTransaccion);
			 List<CategoriaProductoEntity> resDao = null;
			try{
				resDao = categoriaProductoDao.listarCategoriasProd(cadenaFiltros);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.size() > 0){
				List<CategoriaProdBean> lista = new ArrayList<CategoriaProdBean>();
				for(CategoriaProductoEntity row : resDao){
					CategoriaProdBean bean = new CategoriaProdBean();
					bean.setDescripcion(validaciones.validarCamposString(row.getDescripcion()));
					bean.setEstado(row.getEstado());
					bean.setId(row.getId());
					bean.setImagen(validaciones.validarCamposString(row.getImagen()));
					bean.setNivel(row.getNivel());
					bean.setNombre(validaciones.validarCamposString(row.getNombre()));
					bean.setPadre_id(row.getPadre_id());
					bean.setNombrePadre(validaciones.validarCamposString(row.getNombre_padre()));
					bean.setUrl(validaciones.validarCamposString(row.getUrl()));
					bean.setItem(validaciones.validarCamposString(row.getItem()));
					
					lista.add(bean);
				}
				response.setListaCategoriaProductos(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevaCategoriaProd(String codTransaccion, CategoriaProdBean categoriaProd) {
		String mensajeTransaccionMetodo = "[nuevaCategoriaProd idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity resDao = null; 
			CategoriaProductoReq  newItem = new CategoriaProductoReq ();
			newItem.setDescripcion(validaciones.validarCamposString(categoriaProd.getDescripcion()));
			newItem.setEstado(categoriaProd.getEstado());
			newItem.setImagen(validaciones.validarCamposString(categoriaProd.getImagen()));
			newItem.setNivel(categoriaProd.getNivel());
			newItem.setNombre(validaciones.validarCamposString(categoriaProd.getNombre()));
			newItem.setPadre_id(categoriaProd.getPadre_id());
			
			try{
				resDao = categoriaProductoDao.guardarCategoriasProd(newItem);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar el AccesoHost en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse editCategoriaProd(String codTransaccion, CategoriaProdBean categoriaProd) {
		String mensajeTransaccionMetodo = "[editCategoriaProd idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity resDao = null; 
			CategoriaProductoReq editItem = new CategoriaProductoReq();
			editItem.setDescripcion(validaciones.validarCamposString(categoriaProd.getDescripcion()));
			editItem.setEstado(categoriaProd.getEstado());
			editItem.setId(categoriaProd.getId());
			editItem.setImagen(validaciones.validarCamposString(categoriaProd.getImagen()));
			editItem.setNivel(categoriaProd.getNivel());
			editItem.setNombre(validaciones.validarCamposString(categoriaProd.getNombre()));
			editItem.setPadre_id(categoriaProd.getPadre_id());
			
			try{
				resDao = categoriaProductoDao.actualizarCategoriasProd(editItem);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar  en BD "+e );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deletecategoriaProd(String codTransaccion, int codCategoriaProd) {
		String mensajeTransaccionMetodo = "[deletecategoriaProd idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			
			GenericEntity resDao = categoriaProductoDao.eliminarCategoriasProd(codCategoriaProd);
			
			if(resDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_ELIMINAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_ELIMINAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar  en BD " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
		}
		
		return response;
	}

}
